home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fatted Calf
/
The Fatted Calf.iso
/
Applications
/
Graphics
/
nxyplot
/
Source
/
PlotDelegate.m
< prev
next >
Wrap
Text File
|
1994-02-01
|
7KB
|
282 lines
/* Generated by Interface Builder */
/*
* Some of this code is essentially copied from the AtYourService example
* of Henry Krempel.
*/
#import "PlotDelegate.h"
#import "ServicesHandler.h"
#import "Plot.h"
#import "FormatHandler.h"
#import "PlotView.h"
#import "ScrollWindow.h" // added 10-7-91 by pdhowell
#import <strings.h>
#import <appkit/appkit.h>
#import <defaults/defaults.h>
#import <streams/streams.h>
#import <sys/types.h> /* only needed in the iconReleasedAt::: code */
#import <sys/stat.h> /* ditto */
@implementation PlotDelegate
- appWillInit:sender
{
// We used to do this in appDidInit, but ran into trouble when we got
// the Workspace Manager to automatically run nxyplot on files with a
// selected extension. The problem was that the 3 windows which get
// turned into ScrollWindows by the makeSomeScrollWindows method had not been
// turned into ScrollWindows when a message was sent to them that only
// a ScrollView (not an ordinary View) could understand. The solution seems
// to be to make them into ScrollWindows very early in the game, in the
// appWillInit method.
[plotParam makeSomeScrollWindows];
NXUpdateDefaults();
if (strncmp(NXGetDefaultValue("nxyplot", "colorOption"), "YES", 3) == 0) {
[plotParam colorOn:YES];
[colorOptionButton setState:1];
}
else {
[plotParam colorOn:NO];
[colorOptionButton setState:0];
}
if (strncmp(NXGetDefaultValue("nxyplot", "colorPrinting"), "YES", 3) == 0) {
[printColorButton setState:1];
[accPrintColorButton setState:1];
}
else {
[printColorButton setState:0];
[accPrintColorButton setState:0];
}
if (strncmp(NXGetDefaultValue("nxyplot", "cycleLineStyles"), "YES", 3) == 0) {
[printLineStyleButton setState:1];
[accPrintLineStyleButton setState:1];
}
else {
[printLineStyleButton setState:0];
[accPrintLineStyleButton setState:0];
}
if (strncmp(NXGetDefaultValue("nxyplot", "opaqueBackground"), "YES", 3) == 0) {
[opaqueBackgroundButton setState:0];
}
else {
[opaqueBackgroundButton setState:1];
}
if (strncmp(NXGetDefaultValue("nxyplot", "autoPlot"), "YES", 3) == 0) {
[autoPlotButton setState:0];
}
else {
[autoPlotButton setState:1];
}
return self;
}
- appDidInit:sender
{
[[NXApp appListener] setServicesDelegate:self];
[servicesHandler serviceSetState];
[canvasWindow setMiniwindowIcon:"nxyplot.tiff"];
[controlPanel setMiniwindowIcon:"nxyplot.tiff"];
/*
* Look for command line arguments (this used to be in nxyplot_main.m).
*/
if (NXArgc > 1) {
[self getArgs];
}
return self;
}
- resetDefaults:sender
{
if ([colorOptionButton state] == 0) {
NXWriteDefault("nxyplot", "colorOption", "NO");
[plotParam colorOn:NO];
}
else {
NXWriteDefault("nxyplot", "colorOption", "YES");
[plotParam colorOn:YES];
}
if ([printColorButton state] == 0) {
NXWriteDefault("nxyplot", "colorPrinting", "NO");
[accPrintColorButton setState:0];
}
else {
NXWriteDefault("nxyplot", "colorPrinting", "YES");
[accPrintColorButton setState:1];
}
if ([printLineStyleButton state] == 0) {
NXWriteDefault("nxyplot", "cycleLineStyles", "NO");
[accPrintLineStyleButton setState:0];
}
else {
NXWriteDefault("nxyplot", "cycleLineStyles", "YES");
[accPrintLineStyleButton setState:1];
}
if ([opaqueBackgroundButton state] == 0) {
NXWriteDefault("nxyplot", "opaqueBackground", "YES");
}
else {
NXWriteDefault("nxyplot", "opaqueBackground", "NO");
}
if ([autoPlotButton state] == 0) {
NXWriteDefault("nxyplot", "autoPlot", "YES");
}
else {
NXWriteDefault("nxyplot", "autoPlot", "NO");
}
return self;
}
/* This method takes data from a pasteboard and sends it to be plotted. */
- plotFromPasteboard:pb userData:(const char *)userData error:(char **)errorMessage
{
char *data;
int length;
const char *const *types;
int hasAscii, i;
types = [pb types];
hasAscii = 0;
for (i = 0; !hasAscii && types[i] ; i++)
if (!strcmp(types[i], NXAsciiPboardType)
|| !strcmp(types[i], NXTabularTextPboardType)) hasAscii = 1;
if (hasAscii) {
[pb readType:NXAsciiPboardType data:&data length:&length];
if (data && length) {
NXStream *dataStream = NXOpenMemory(data, length, NX_READONLY);
if ([plotParam readData:dataStream :"pasteboard"] == 0) {
NXRunAlertPanel("Read", "Couldn't read any data from %s", "OK",
NULL, NULL, "pasteboard");
}
[plotParam plotPrepAndDraw];
}
else *errorMessage = "No data in your selection.";
}
else *errorMessage = "No ASCII text found in your selection.";
return self;
}
// The next 2 methods suggested by Ralph Zazula. They are needed to get
// WorkspaceManager automatically to run nxyplot when you double-click on
// files with our registered extension(s).
- (BOOL)appAcceptsAnotherFile:sender
{
return YES;
}
- (int)app:sender openFile:(const char *)fullPath type:(const char *)aType
{
[plotParam openFile:(char *)fullPath :(char *)fullPath];
return YES;
}
- getArgs
{
int i, formatindex = 0, psindex = 0;
NXStream *formatStream;
BOOL quit = NO;
[plotParam makeSomeScrollWindows]; /* must do this here! */
NXUpdateDefaults(); /* ditto */
if (strncmp(NXGetDefaultValue("nxyplot", "colorOption"), "YES", 3) == 0) {
[plotParam colorOn:YES];
[colorOptionButton setState:1];
}
else {
[plotParam colorOn:NO];
[colorOptionButton setState:0];
}
i = 1;
while (i<NXArgc) {
if (NXArgv[i][0] == '-') {
if (NXArgv[i][1] == 'f') { /* format file */
formatindex = ++i;
}
else if (NXArgv[i][1] == 'o') { /* eps file */
psindex = ++i;
}
else if (NXArgv[i][1] == 'q') { /* quit after plotting */
i++;
quit = YES;
}
else if (NXArgv[i][1] == 'h') {
NXLogError("usage: nxyplot file [file...] [-f formatfile] [-o epsfile] [-q] [-h]\n");
exit(0);
}
else
NXLogError("Unrecognized option %s\n", NXArgv[i++]);
}
else {
if (NXMapFile(NXArgv[i], NX_READONLY) == NULL) {
NXLogError("Unable to open file %s\n", NXArgv[i]);
}
else {
[plotParam openFile:NXArgv[i] :NXArgv[i]];
}
}
i++;
}
if (formatindex > 0)
if ((formatStream = NXMapFile(NXArgv[formatindex], NX_READONLY)) == NULL)
NXLogError("Unable to open format file %s\n", NXArgv[formatindex]);
else
[formatHandler readFormatData:formatStream];
if (psindex > 0)
[canvas savePSCode:NXArgv[psindex]];
if (quit) {
NXLogError("nxyplot: quit option selected\n");
[NXApp free];
exit(0);
}
else
[plotParam drawPlot:self];
return self;
}
// Next method copied from Garfinkel and Mahoney (Chapter 6)
- showInfo:sender
{
if (infoPanel == nil) {
if (![NXApp loadNibSection: "Info.nib"
owner:self
withNames: NO]) {
return nil; // load failed
}
}
[infoPanel makeKeyAndOrderFront:nil];
return self;
}
- showHelp:sender
{
if (helpPanel == nil) {
if (![NXApp loadNibSection: "help.nib"
owner:self
withNames: NO]) {
return nil; // load failed
}
}
[helpPanel makeKeyAndOrderFront:nil];
return self;
}
@end